// 一、将下面异步代码使用Promise的方式改进
var promise = new Promise(function(resolve,reject){
    resolve('hello')
})
promise.then(value=>{
    return value+' lagou'
}).then(value=>{
    console.log(value+' I ♥ U') 
})

//二、基于以下代码完成下面的四个练习
//练习1：使用函数组合 fp.flowRight() 重新实现下面这个函数
let lastInStock = fp.flowRight(fp.prop('in_stock'),fp.last)
console.log(lastInStock(cars))

//练习2：使用 fp.flowRight()、fp.prop() 和 fp.first() 获取第一个 car 的 name
let firstName = fp.flowRight(fp.prop('name'),fp.first)
console.log(firstName(cars))

//练习3：使用帮助函数 _average 重构 averageDollarValue，使用函数组合的方式实现
//第一种写法
let averageDollarValue = fp.flowRight(_average,fp.map(fp.prop('dollar_value')))
console.log(averageDollarValue(cars))
//第二种写法
let averageDollarValue2 = fp.flowRight(_average,fp.map(car=>car.dollar_value))
console.log(averageDollarValue2(cars))

//练习4：使用 flowRight 写一个 sanitizeNames() 函数
let sanitizeNames =fp.map(fp.flowRight(_underscore,fp.toLower,fp.prop('name')))
console.log(sanitizeNames(cars))

//三、
//练习1：使用 fp.add(x, y) 和 fp.map(f, x) 创建一个能让 functor 里的值增加的函数 ex1
ex1 = maybe.map(x=>
    fp.map(fp.add(1),x)
)
console.log(ex1)

//练习2：实现一个函数 ex2，能够使用 fp.first 获取列表的第一个元素
ex2 = xs.map(fp.first)._value
console.log(ex2)

//练习3：实现一个函数 ex3，使用 safeProp 和 fp.first 找到 user 的名字的首字母
ex3 = fp.flowRight(fp.map(fp.first),safeProp('name'))
console.log(ex3(user))

//练习4：使用 Maybe 重写 ex4，不要有 if 语句
let  ex4 = n=>Maybe.of(n).map(parseInt)._value
  ex4(n)